Computer science  or computing science  is the study of the theoretical foundations of information and computation  and of practical techniques for their implementation and application in computer systems  It is frequently described as the systematic study of algorithmic processes that create  describe and transform information  According to Peter J  Denning  the fundamental question underlying computer science is   What can be  efficiently  automated   Computer science has many sub-fields; some  such as computer graphics  emphasize the computation of specific results  while others  such as computational complexity theory  study the properties of computational problems  Still others focus on the challenges in implementing computations  For example  programming language theory studies approaches to describing computations  while computer programming applies specific programming languages to solve specific computational problems  and human-computer interaction focuses on the challenges in making computers and computations useful  usable  and universally accessible to people 
The general public sometimes confuses computer science with vocational areas that deal with computers  such as information technology   or think that it relates to their own experience of computers  which typically involves activities such as gaming  web-browsing  and word-processing  However  the focus of computer science is more on understanding the properties of the programs used to implement software such as games and web-browsers  and using that understanding to create new programs or improve existing ones 
The early foundations of what would become computer science predate the invention of the modern digital computer  Machines for calculating fixed numerical tasks  such as the abacus  have existed since antiquity  Wilhelm Schickard built the first mechanical calculator in 1623   Charles Babbage designed a difference engine in Victorian times  helped by Ada Lovelace   Around 1900  punch-card machines  were introduced  However  all of these machines were constrained to perform a single task  or at best some subset of all possible tasks 
During the 1940s  as newer and more powerful computing machines were developed  the term computer came to refer to the machines rather than their human predecessors  As it became clear that computers could be used for more than just mathematical calculations  the field of computer science broadened to study computation in general  Computer science began to be established as a distinct academic discipline in the 1950s and early 1960s  with the creation of the first computer science departments and degree programs    Since practical computers became available  many applications of computing have become distinct areas of study in their own right 
Although many initially believed it impossible that computers themselves could actually be a scientific field of study  in the late fifties it gradually became accepted among the greater academic population   It is the now well-known IBM brand that formed part of the computer science revolution during this time  IBM  short for International Business Machines  released the IBM 704 and later the IBM 709 computers  which were widely used during the exploration period of such devices   Still  working with the IBM  computer  was frustrating   if you had misplaced as much as one letter in one instruction  the program would crash  and you would have to start the whole process over again    During the late 1950s  the computer science discipline was very much in its developmental stages  and such issues were commonplace 
Time has seen significant improvements in the usability and effectiveness of computer science technology  Modern society has seen a significant shift from computers being used solely by experts or professionals to a more widespread user base 
 Major achievements
The German military used the Enigma machine during World War II for communication they thought to be secret  The large-scale decryption of Enigma traffic at Bletchley Park was an important factor that contributed to Allied victory in WWII  
Despite its short history as a formal academic discipline  computer science has made a number of fundamental contributions to science and society  These include 
Started the  digital revolution   which includes the current Information Age and the Internet  
A formal definition of computation and computability  and proof that there are computationally unsolvable and intractable problems  
The concept of a programming language  a tool for the precise expression of methodological information at various levels of abstraction  
In cryptography  breaking the Enigma machine was an important factor contributing to the Allied victory in World War II  
Scientific computing enabled advanced study of the mind  and mapping the human genome became possible with Human Genome Project   Distributed computing projects such as Folding@home explore protein folding 
Algorithmic trading has increased the efficiency and liquidity of financial markets by using artificial intelligence  machine learning  and other statistical and numerical techniques on a large scale  
Fields of computer science
As a discipline  computer science spans a range of topics from theoretical studies of algorithms and the limits of computation to the practical issues of implementing computing systems in hardware and software The Computer Sciences Accreditation Board  CSAB   which is made up of representatives of the Association for Computing Machinery  ACM   the Institute of Electrical and Electronics Engineers Computer Society  and the Association for Information Systems  identifies four areas that it considers crucial to the discipline of computer science  theory of computation  algorithms and data structures  programming methodology and languages  and computer elements and architecture  In addition to these four areas  CSAB also identifies fields such as software engineering  artificial intelligence  computer networking and communication  database systems  parallel computation  distributed computation  computer-human interaction  computer graphics  operating systems  and numerical and symbolic computation as being important areas of computer science 
Theoretical computer science
The broader field of theoretical computer science encompasses both the classical theory of computation and a wide range of other topics that focus on the more abstract  logical  and mathematical aspects of computing 
Mathematical logic	Automata theory	Number theory	Graph theory	Type theory	Category theory	Computational geometry	Quantum computing theory
 Theory of computation
The study of the theory of computation is focused on answering fundamental questions about what can be computed and what amount of resources are required to perform those computations  In an effort to answer the first question  computability theory examines which computational problems are solvable on various theoretical models of computation  The second question is addressed by computational complexity theory  which studies the time and space costs associated with different approaches to solving a computational problem 
The famous  P=NP   problem  one of the Millennium Prize Problems   is an open problem in the theory of computation 
P = NP
Computability theory	Computational complexity theory
Algorithms and data structures
Analysis of algorithms	Algorithms	Data structures
Programming methodology and languages
Compilers Programming languages
Computer elements and architecture
Digital logic	Microarchitecture	Multiprocessing
Numerical and symbolic computation
y = sin x  + c
Bioinformatics	Cognitive Science	Computational chemistry	Computational neuroscience	Computational physics	Numerical algorithms	Symbolic mathematics
 Applications
The following disciplines are often studied from a more theoretical  computer science viewpoint  as well as from a more practical  engineering perspective 
Operating systems	Computer networks	Computer graphics	Computer vision	Databases
Computer security	Artificial intelligence	Robotics	Humancomputer interaction	Ubiquitous computing
Relationship with other fields
Despite its name  a significant amount of computer science does not involve the study of computers themselves  Because of this  several alternative names have been proposed  Certain departments of major universities prefer the term computing science  to emphasize precisely that difference  Danish scientist Peter Naur suggested the term datalogy  to reflect the fact that the scientific discipline revolves around data and data treatment  while not necessarily involving computers  The first scientific institution to use the term was the Department of Datalogy at the University of Copenhagen  founded in 1969  with Peter Naur being the first professor in datalogy  The term is used mainly in the Scandinavian countries  Also  in the early days of computing  a number of terms for the practitioners of the field of computing were suggested in the Communications of the ACM  turingineer  turologist  flow-charts-man  applied meta-mathematician  and applied epistemologist   Three months later in the same journal  comptologist was suggested  followed next year by hypologist   The term computics has also been suggested   Informatik was a term used in Europe with more frequency 
The renowned computer scientist Edsger Dijkstra stated   Computer science is no more about computers than astronomy is about telescopes   The design and deployment of computers and computer systems is generally considered the province of disciplines other than computer science  For example  the study of computer hardware is usually considered part of computer engineering  while the study of commercial computer systems and their deployment is often called information technology or information systems  However  there has been much cross-fertilization of ideas between the various computer-related disciplines  Computer science research has also often crossed into other disciplines  such as cognitive science  economics  mathematics  physics  see quantum computing   and linguistics 
Computer science is considered by some to have a much closer relationship with mathematics than many scientific disciplines  with some observers saying that computing is a mathematical science   Early computer science was strongly influenced by the work of mathematicians such as Kurt Gdel and Alan Turing  and there continues to be a useful interchange of ideas between the two fields in areas such as mathematical logic  category theory  domain theory  and algebra 
The relationship between computer science and software engineering is a contentious issue  which is further muddied by disputes over what the term  software engineering  means  and how computer science is defined  David Parnas  taking a cue from the relationship between other engineering and science disciplines  has claimed that the principal focus of computer science is studying the properties of computation in general  while the principal focus of software engineering is the design of specific computations to achieve practical goals  making the two separate but complementary disciplines 
The academic  political  and funding aspects of computer science tend to depend on whether a department formed with a mathematical emphasis or with an engineering emphasis  Computer science departments with a mathematics emphasis and with a numerical orientation consider alignment computational science  Both types of departments tend to make efforts to bridge the field educationally if not across all research 
Computer science education
Some universities teach computer science as a theoretical study of computation and algorithmic reasoning  These programs often feature the theory of computation  analysis of algorithms  formal methods  concurrency theory  databases  computer graphics and systems analysis  among others  They typically also teach computer programming  but treat it as a vessel for the support of other fields of computer science rather than a central focus of high-level study 
Other colleges and universities  as well as secondary schools and vocational programs that teach computer science  emphasize the practice of advanced programming rather than the theory of algorithms and computation in their computer science curricula  Such curricula tend to focus on those skills that are important to workers entering the software industry  The practical aspects of computer programming are often referred to as software engineering  However  there is a lot of disagreement over the meaning of the term  and whether or not it is the same thing as programming 